//
//  iMBiPhoneView.h
//  iMediaBrowse
//
//  Created by Eberhard Rensch on 14.08.08.
//  Copyright 2008 Pleasant Software. All rights reserved.
//
// Plugin for iMedia Browser
//
// iMedia Browser is based on code originally developed by Jason Terhorst,
// further developed for Sandvox by Greg Hulands, Dan Wood, and Terrence Talbot.
// Contributions have also been made by Matt Gough, Martin Wennerberg and others
// as indicated in source files.
// 
// The iMedia Browser Framework is licensed under the following terms:
// 
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in all or substantial portions of the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the following
// conditions:
// 
//	Redistributions of source code must retain the original terms stated here,
//	including this list of conditions, the disclaimer noted below, and the
//	following copyright notice: Copyright (c) 2008 by Pleasant Software
// 
//	Redistributions in binary form must include, in an end-user-visible manner,
//	e.g., About window, Acknowledgments window, or similar, the original
//	terms stated here, including this list of conditions, the disclaimer noted
//	below, and the aforementioned copyright notice.
// 
//	Neither the name of Pleasant Software, nor the names of
//	contributors to iMedia Browser may be used to endorse or promote products
//	derived from the Software without prior and express written permission from
//	Pleasant Software or individual contributors, as appropriate.
// 
// Disclaimer: THE SOFTWARE IS PROVIDED BY THE COPYRIGHT OWNER AND CONTRIBUTORS
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
// AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF
// CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH, THE
// SOFTWARE OR THE USE OF, OR OTHER DEALINGS IN, THE SOFTWARE.
//

#import <Cocoa/Cocoa.h>
#import <iMediaBrowser/iMBAbstractView.h>
	
@class iMBDNDArrayController;
@class TarWrapper;
@interface iMBiPhoneView : iMBAbstractView
{
	IBOutlet NSTableView			*table;
    
	IBOutlet iMBDNDArrayController	*oFilesController;
	BOOL finishedInit;
	
	BOOL enabled;

	id iPhoneViewDelegate;
	
	// Bonjour
	NSString*	serviceType;
	NSNetServiceBrowser* serviceBrowser;
	BOOL searching;

	NSMutableArray* iMediaServerDevices;
	
	NSNetService* currentResolve;
	BOOL			  currentResolveIsAuthenticated;
	
	// Networking
	NSInputStream* inStream;
	NSOutputStream* outStream;
	BOOL inReady;
	BOOL outReady;
	
	UInt32 bytesToRead;
	NSMutableData* receivedData;
	
	TarWrapper*	receivingFile;
	TarWrapper*	sendingFile;
	
	NSDictionary*	promissedFileData;

	// Authentication
	NSAlert* authenticationDialog;
}

+ (NSMutableArray*)iMediaServerDevices; // Needed as class function for iMBiPhoneParser

- (void)setServiceType:(NSString*)type;
- (NSString*)serviceType;
- (void)setIPhoneViewDelegate:(id)del;
- (id)iPhoneViewDelegate;
- (NSMutableArray*)iMediaServerDevices;

- (BOOL)hasAuthenticatedConnection;

- (BOOL)enabled;
- (void)setEnabled:(BOOL)value;

// Service methods
- (void)sendFile:(NSString*)filePath uuid:(NSString*)uuidOrNil destinationPath:(NSString*)destinationPathOrNil dontWrap:(BOOL)dontWrap overwriteExistingData:(BOOL)overwrite;
- (void)sendData:(NSData*)data dataType:(NSString*)type overwriteExistingData:(BOOL)overwrite;
- (void)fetchFileWithUUID:(NSString*)uuid to:(NSString*)path dontUnwrap:(BOOL)dontUnwrap;

- (void)cancelAuthentification;

- (NSNumber*)currentTransferProgress;

- (void)refreshCatalog;
@end

@interface NSObject (iPhoneViewDelegate)
- (void)iPhoneViewOpenAuthentificationAlert:(iMBiPhoneView*)view withCode:(NSString*)code;
- (void)iPhoneViewCloseAuthentificationAlert:(iMBiPhoneView*)view;

- (void)iPhoneViewStateChanged:(iMBiPhoneView*)view;
- (void)iPhoneViewBeginFetchingPromissedFiles:(iMBiPhoneView*)view numberOfFiles:(UInt32)numberOfFiles;
- (void)iPhoneViewEndFetchingPromissedFiles:(iMBiPhoneView*)view;
- (void)iPhoneViewBeginFetchingFile:(iMBiPhoneView*)view filePath:(NSString*)filePath;
- (void)iPhoneViewEndFetchingFile:(iMBiPhoneView*)view;

- (void)iPhoneViewSendFileSuccess:(iMBiPhoneView*)view;
- (void)iPhoneViewSendFileAlreadyExists:(iMBiPhoneView*)view;
- (void)iPhoneViewSendDataSuccess:(iMBiPhoneView*)view;
- (void)iPhoneViewSendDataAlreadyExists:(iMBiPhoneView*)view;
- (void)iPhoneViewError:(iMBiPhoneView*)view message:(NSString*)message;

// If not implemented, iMBuPhoneView won't calculate any progress information
- (void)iPhoneViewTransferringProgressInit:(iMBiPhoneView*)view totalSizeToTransfer:(NSNumber*)totalSizeToTransfer;
@end

